package dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import model.Artikel;
import model.artikelListe;
import db.DbConnection;

public class ArtikelDAO {
	artikelListe artikel = new artikelListe();
	final String selectArtikel = "SELECT * FROM Artikel";

	public artikelListe getAllArtikel() throws SQLException {
		Connection con = DbConnection.getInstance();
		Statement s = con.createStatement();

		ResultSet rs = s.executeQuery(this.selectArtikel);

		while (rs.next()) {
			int id = rs.getInt("ID");
			String name = rs.getString("Name");
			String verkaeufer = rs.getString("Verkaeufer");
			String status = rs.getString("Status");
			Date startdatum = new Date(rs.getLong("StartDatum"));
			Date enddatum = new Date(rs.getLong("EndDatum"));
			String beschreibung = rs.getString("Beschreibung");
			String isbn = rs.getString("ISBN");
			double gebotspreis = rs.getDouble("GebotsPreis");
			double SofortKaufP = rs.getDouble("Sofortpreis");
			String kaeufer = rs.getString("Kaeufer");
			String kategorie = rs.getString("Kategorie");
			artikel.add(new Artikel(id, name, status, verkaeufer, startdatum, gebotspreis, SofortKaufP, enddatum, beschreibung, isbn, kaeufer, kategorie));
		}
		return artikel;
	}

	public artikelListe findArtikel(String whereString) throws SQLException {
		Connection con = DbConnection.getInstance();
		Statement s = con.createStatement();
		ResultSet rs = s.executeQuery(this.selectArtikel + " " + whereString);
		artikelListe liste = new artikelListe();

		while (rs.next()) {
			int id = rs.getInt("ID");
			String name = rs.getString("Name");
			String verkaeufer = rs.getString("Verkaeufer");
			String status = rs.getString("Status");
			Date startdatum = new Date(rs.getLong("StartDatum"));
			Date enddatum = new Date(rs.getLong("EndDatum"));
			String beschreibung = rs.getString("Beschreibung");
			String isbn = rs.getString("ISBN");
			double gebotspreis = rs.getDouble("GebotsPreis");
			double SofortKaufP = rs.getDouble("Sofortpreis");
			String kaeufer = rs.getString("Kaeufer");
			String kategorie = rs.getString("Kategorie");
			liste.add(new Artikel(id, name, status, verkaeufer, startdatum, gebotspreis, SofortKaufP, enddatum, beschreibung, isbn, kaeufer, kategorie));
		}
		
		System.out.println(this.selectArtikel + " " + whereString);
		
		return liste;
	}
	
	public artikelListe findArtikel(String name, String kategorie) throws SQLException {
		return findArtikel("WHERE (Name LIKE '%" + name + "%' OR Beschreibung LIKE '%" + name + "%') AND Kategorie LIKE '%" + kategorie + "%' AND Status ='offen'");
	}

	public artikelListe anzeigenArtikel(String name, String kategorie) throws SQLException {
		return findArtikel("WHERE (Name LIKE '%" + name + "%' OR Beschreibung LIKE '%" + name + "%') AND Kategorie LIKE '%" + kategorie + "%'");
	}
	
	public boolean saveArtikel(Artikel a) throws SQLException {
		Connection con = DbConnection.getInstance();
		Statement s = con.createStatement();

		if (a.get_id() == 0) {
			final String InsertArtikel = "Insert into Artikel(ISBN,Verkaeufer,Gebotspreis,Sofortpreis,Name,StartDatum,EndDatum,Status,Beschreibung,Kaeufer,Kategorie)" + "VALUES" + "('" + a.get_ISBN()
					+ "','" + a.get_verkaeufer() + "','" + a.get_gebotspreis() + "','" + a.get_SofortKaufP() + "','" + a.get_name() + "','" + String.valueOf(a.get_startdatum().getTime()) + "','" + String.valueOf(a.get_enddatum().getTime()) + "','"
					+ a.get_status() + "','" + a.get_beschreibung() + "','','" +  a.get_kategorie() + "')";
			if (s.executeUpdate(InsertArtikel) > 0) {
				return true;
			}
			return false;
		} else {
			final String updateArtikel = String.format("UPDATE Artikel SET Kaeufer = '%s', Gebotspreis = '%s', ISBN = '%s', Verkaeufer = '%s', Sofortpreis = '%s', "
					+ "Name = '%s', StartDatum = '%s', EndDatum = '%s', Status = '%s', Beschreibung = '%s', Kategorie = '%s' WHERE ID = '%s'", a.get_kaeufer(), String.valueOf(a.get_gebotspreis()), a.get_ISBN(),
					a.get_verkaeufer(), String.valueOf(a.get_SofortKaufP()), a.get_name(), String.valueOf(a.get_startdatum().getTime()), String.valueOf(a.get_enddatum().getTime()), a.get_status(),
					a.get_beschreibung(),a.get_kategorie(), String.valueOf(a.get_id()));

			if (s.executeUpdate(updateArtikel) > 0) {
				return true;
			}

			return false;
		}
	}
}
